
export interface BillId {
    /**
     * 单据表名称
     */
    TableName?: string;
    ColumnName?: string;
    /**
     * 在tb_enjoy_bill 表里配置的 c_bill_name
     * 如果这个属性有值，会按照配置表里的配置。
     * 如果没有则自动按照流水号生成
     */
    BillName?: string;
    /**
     * 单据号规则里变量的值，给此赋值，如果在单据号设置里选择了变量会用此值替换变量
     */
    BillVariable?: string;
    /**
     * 流水号长度,默认为6为
     */
    FlowLen?: number;
    /**
     * 单据号
     * 如果V单据号字段
     * valuealue为null则自动生成，如果不为null则用此值
     * key==单据号字段
     */
    BillIdKeyValue?: {
        key: string;
        value: string;
    };
}
export interface SaveModelBase {
    /**
     * 自动保存操作的数据库表名,统一保存的时候必须指定
     */
    TableName?: string;
    /**
     * 指定修改，保存的字段名
     * 如果不指定,自动用实体的字段名
     */
    Cloumns?: Array<string>;
    /**
     * update时排除的列
     */
    ExcludeColumnsWhenUpdate?: Array<string>;
    /**
     * 多个主键数组
     */
    PrimaryKeys?: Array<string>;
    /**
     * 单据号设置规则
     */
    BillSet?: BillId;
}
export interface SaveModelT<T> extends SaveModelBase {
    /**
     *数据库没有被持久化的数据
     */
    NewList?: Array<T>;
    /**
     * 数据库已持久化，并且存在修改的数据
     */
    ModifiedList?: Array<T>;
    /**
     * 待从数据库删除的数据
     */
    DelList?: Array<T>;
}
export interface TableRelation<TChild extends object> {
    /**
     * 关系的名称
     */
    RelationName?: string;
    /**
     * 作为关系的父表的名称
     */
    ParentTableName?: string;
    /**
     * 子表的名称
     */
    ChildTableName?: string;
    /**
     * 父表与子表表对应的的字段
     */
    ParentColumnNames?: Array<string>;
    /**
     *子表与父表对应的的字段
     */
    ChildColumnNames?: Array<string>;
    /**
     * 子表数据的SaveModel对象
     */
    ChildSaveModel?: TChild;
}
export interface SaveModel<T> extends SaveModelT<T> {
    /**
     *子集合
     */
    ChildData?: Array<TableRelation<any>>;
}

export interface TableInfo {
    tableName: string;
    primaryKeys: string[];
    ignore?: string[];
}
export interface TableModel {
    main: Array<TableInfo>;
    detail?: Array<TableInfo>;
}
